package io.renren.common.utils;

import lombok.extern.slf4j.Slf4j;

import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author liuxinyi
 * @version 1.0.0
 * @title 字符串操作
 * @date 2016年11月14日
 */
@Slf4j
public class StringUtil {

    /**
     * 功能描述:截取带Emoji表情的字符串
     *
     * @param:
     * @return:
     * @auther: miaoguoxin
     * @date: 2019/4/3 0003 18:53
     */
    public static String subCodeString(String source, int start, int end) {
        if (end > source.length()) {
            end = source.length();
        }
        int endIndex = source.codePointCount(0, end);
        String result;
        try {
            result = source.substring(source.offsetByCodePoints(0, start),
                    source.offsetByCodePoints(0, endIndex));
        } catch (Exception e) {
            result = "";
        }
        return result;
    }

    /**
     * 将以逗号分隔的字符串转换成字符串数组
     *
     * @param valStr
     * @return String[]
     */
    public static String[] strList(String valStr) {
        int i = 0;
        String tempStr = valStr;
        String[] returnStr = new String[valStr.length() + 1 - tempStr.replace(",", "").length()];
        valStr = valStr + ",";
        while (valStr.indexOf(',') > 0) {
            returnStr[i] = valStr.substring(0, valStr.indexOf(','));
            valStr = valStr.substring(valStr.indexOf(',') + 1, valStr.length());

            i++;
        }
        return returnStr;
    }


    /**
     * 字符串编码转换函数，用于将指定编码的字符串转换为标准（Unicode）字符串
     *
     */
    public static String getStr(Object strSrc) {
        if (isEmpty(strSrc)) {
            return "";
        }
        return strSrc.toString().trim();
    }

    /**
     * 获取字符串
     *
     * @param strSrc    当前字符串
     * @param defaultStr 默认字符串
     * @return
     */
    public static String getStrByDefault(Object strSrc, String defaultStr) {
        if (isEmpty(strSrc)) {
            return defaultStr;
        }
        return getStr(strSrc.toString());
    }


    /**
     * 判断指定字符串是否为空
     *
     * @param string 指定的字符串
     * @return 若字符串为空对象（string==null）或空串（长度为0），则返回true；否则，返回false.
     */
    public static boolean isEmpty(Object string) {
        return (("null".equals(string)) || (string == null) || (string.toString().trim().length() == 0));
    }

    /**
     * 判定非空
     *
     * @param string
     * @return
     */
    public static boolean isNotEmpty(Object string) {
        return (!isEmpty(string));
    }

    /**
     * list转换为逗号分隔的字符串
     *
     * @param list
     * @return
     */
    public static String listToStr(List<?> list) {
        String str = "";
        if (list != null && list.size() > 0) {
            for (Object ob : list) {
                str += "," + ob;
            }
            str = str.substring(1);
        }
        return str;
    }


    /**
     * 字符串显示处理函数：若为空对象，则返回指定的字符串
     *
     * @param sValue         指定的字符串
     * @param sReplaceIfNull 当_sValue==null时的替换显示字符串；可选参数，缺省值为空字符串（""）
     * @return 处理后的字符串
     */
    public static String showNull(String sValue, String sReplaceIfNull) {
        return (sValue == null ? sReplaceIfNull : sValue);
    }

    /**
     * 正则匹配参数 获取参数
     *
     * @param exp     正则表达式
     * @param content 参数
     * @return
     */
    public static String getRegExp(String exp, String content) {
        Pattern pattern = Pattern.compile(exp);
        Matcher matcher = pattern.matcher(content);
        if (matcher.find()) {
            return matcher.group(0);
        }
        return null;
    }


    /**
     * 只要满足一个empty就是true
     * @param str
     * @return
     */
    public static boolean oneStrIsEmpty(String... str){
        for (String s : str) {
            if (isEmpty(s)) {

                return true;
            }
        }
        return false;
    }
}
